home *** CD-ROM | disk | FTP | other *** search
/ 17 Bit Software 6: Level 6 / 17 Bit - Level 6 (1998)(Epic Marketing)[!].iso / !applications! / symphonie / dsplugin / dspplugin echo.s < prev    next >
Text File  |  1994-04-11  |  6KB  |  403 lines

  1.  
  2. ; Simple DSP Echo algorithm V1.0 - For Demonstration
  3.  
  4. ; A Ringbuffer is installed using SST_GetMem
  5. ; Fixed Size of Echo in SampleNumb 
  6. ;  -> Fixed Length (time) at same MixFreq
  7. ; If no buffer mem has been allocated, the delay algorithm
  8. ; won't be processed (using RingBufMem_STATUS)
  9.  
  10.  
  11. DspName    macro
  12.     dc.b    "Echo"
  13.     endm
  14.  
  15.     ;- BEGIN -------------------------------------------------
  16.  
  17.     MC68020
  18.  
  19. SST_SYS_GetMem            EQU    0
  20. SST_SYS_FreeMem            EQU    4
  21.  
  22. SST_FILE_RequestFileName    EQU    100
  23. SST_FILE_SetReqPattern        EQU    104
  24. SST_FILE_SetReqDir        EQU    108
  25. SST_FILE_GetFileName        EQU    112
  26. SST_FILE_GetFileLen        EQU    116
  27.  
  28. SST_GFX_AssistText        EQU    200
  29. SST_GFX_AssistDecLong        EQU    204
  30. SST_GFX_AssistDecByte        EQU    208
  31. SST_GFX_AssistHexLong        EQU    212
  32.  
  33. SST_AUDIO_GetChunkLen        EQU    400
  34.  
  35. SST_PTR_EXECBASE        EQU    1600
  36. SST_PTR_INTBASE            EQU    1604
  37. SST_PTR_DOSBASE            EQU    1608
  38. SST_PTR_ASLBASE            EQU    1612
  39. SST_PTR_REQTOOLSBASE        EQU    1616
  40. SST_PTR_GFXBASE            EQU    1620
  41.  
  42. SST_PTR_Screen            EQU    1650
  43.  
  44. SST_ADR_ProcessorFlags        EQU    1800
  45. SST_ADR_SystemFrequency        EQU    1804
  46. SST_ADR_SystemBpm        EQU    1808
  47. SST_ADR_ChunkLen        EQU    1812
  48. SST_ADR_OversampleFlag        EQU    1816
  49.  
  50.  
  51. FASTMEM    EQU    $10004
  52. ANYMEM    EQU    $10000
  53.  
  54. CALLSST    macro
  55.     move.l    #SST_\1,d7
  56.     bsr    GoSST
  57.     endm
  58.  
  59. FLASH    macro
  60.     move.w    #$\1,$dff180
  61.     endm
  62.  
  63. BGN    macro
  64.     movem.l    d0-d7/a0-a6,-(a7)
  65.     endm
  66.  
  67. RET    macro
  68.     movem.l    (a7)+,d0-d7/a0-a6
  69.     rts
  70.     endm
  71.  
  72. puts    macro
  73.     movem.l    \1,-(sp)
  74.     endm
  75.  
  76. gets    macro
  77.     movem.l    (sp)+,\1
  78.     endm
  79.  
  80. acode    macro
  81.     CNOP 0,4
  82.     endm
  83.  
  84.     dc.b    "Symphonie DSP Plugin"    ;MAGIC String    (PRIVATE)
  85.     dc.w    1,0            ;Version,Release (PRIVATE,DO NOT CHANGE)
  86.  
  87.     ;- DSPLIB -------------------------------------------------
  88.  
  89.     jmp    InitDSP(PC)        ;Allocate Mem, Build your Tables
  90.     jmp    CleanUpDSP(PC)        ;Free Mem
  91.  
  92.     jmp    ProcDsp(PC)        ;Process DSP algorithm (interrupt)
  93.  
  94.     jmp    GetDspTitle(PC)        ;Get DSP algorithm Title
  95.     jmp    ModifyValue(PC)        ;notify changed Value
  96.  
  97.     jmp    GraphSizeModify(PC)    ;notify graph size has changed
  98.     jmp    RefreshGraph(PC)    ;notify its time for a GFX update
  99.  
  100.     jmp    StartDSP(PC)        ;notify start
  101.     jmp    StopDSP(PC)        ;notify stop
  102.     dc.l    -1
  103.  
  104.     ;- CODE --------------------------------------------------
  105.  
  106.     acode
  107. GoSST    move.l    a6,-(sp)
  108.     move.l    SUPERSTBASE(PC),a6
  109.     move.l    (a6,d7.w),a6
  110.     jsr    (a6)
  111.     move.l    (sp)+,a6
  112.     rts
  113. SUPERSTBASE    dc.l    0
  114.  
  115.     acode
  116. StartDSP
  117.     bsr    FreeDelayMem
  118.  
  119.     lea.l    RingBufMem_STATUS(PC),a0
  120.     clr.b    (a0)
  121.  
  122.     lea.l    Delay_MEM(PC),a0
  123.  
  124.     CALLSST SYS_GetMem
  125.     tst.l    d0
  126.     beq.s    .exit            ;No Memory
  127.  
  128.     lea.l    Delay_MEM(PC),a2
  129.  
  130.     move.l    (a2),a0
  131.  
  132.     move.l    a0,DELAYREAD_PTR(a2)
  133.     lea.l    (DELAYLEN.l,a0),a1
  134.     move.l    a1,DELAYWRITE_PTR(a2)
  135.     lea.l    (DELAYBUFLEN-4,a0),a1
  136.     move.l    a1,DELAYEND_PTR(a2)
  137.  
  138.     lea.l    RingBufMem_STATUS(PC),a0
  139.     move.b    #-1,(a0)
  140.  
  141.  
  142.     lea.l    On_TXT(PC),a0
  143.     CALLSST GFX_AssistText
  144.  
  145. .exit    rts
  146.  
  147.     acode
  148. StopDSP
  149.     lea.l    RingBufMem_STATUS(PC),a0
  150.     clr.b    (a0)
  151.     bsr    FreeDelayMem
  152.  
  153.     lea.l    Off_TXT(PC),a0
  154.     CALLSST GFX_AssistText
  155.     rts
  156.  
  157.     acode
  158. FreeDelayMem
  159.     BGN
  160.     lea.l    RingBufMem_STATUS(PC),a0
  161.     clr.b    (a0)
  162.  
  163.     tst.l    Delay_MEM(PC)
  164.     beq.s    .exit
  165.         lea.l    Delay_MEM(PC),a0
  166.         CALLSST SYS_FreeMem
  167. .exit    RET
  168.     
  169.  
  170.         dc.l    0,0,0,0,0,0
  171. Delay_MEM    dc.l    0,DELAYBUFLEN,ANYMEM
  172.  
  173. On_TXT    DspName
  174.     dc.b    ": On",0
  175.  
  176.     
  177. Off_TXT    DspName
  178.     dc.b    ": Off",0
  179.  
  180.     acode
  181. GraphSizeModify
  182.     rts
  183.  
  184. RefreshGraph
  185.     rts
  186.  
  187.     acode
  188. ModifyValue    ;INPUT (D0L,D1L)(VALUE, PARAMETER ID)
  189.     lea.l    Volume(PC),a0
  190.  
  191.     tst.l    d1
  192.     beq.s    .para0
  193.     
  194.     lea.l    4(a0),a0
  195.     
  196. .para0    move.l    d0,(a0)
  197.     rts
  198.  
  199.  
  200.  
  201. Volume    dc.l    128,1
  202.  
  203.     acode
  204. InitDSP        ;I(A0L)(SUPERSUPPORTTABLE_PTR)
  205.         ;O(A0L)(DSPGUI_PTR)
  206.  
  207.     lea.l    SUPERSTBASE(PC),a1
  208.     move.l    a0,(a1)
  209.  
  210.     lea.l    Welcome_TXT(PC),a0
  211.     CALLSST GFX_AssistText
  212.  
  213.     lea.l    Parameter_DEF(PC),a0
  214.     rts
  215.  
  216. CleanUpDSP    
  217.     lea.l    RingBufMem_STATUS(PC),a0
  218.     clr.b    (a0)
  219.     rts
  220.  
  221. GetDspTitle    ;OUTPUT (A0L)(DSPTitle_TXT)
  222.     lea.l    DSPTitle(PC),a0
  223.     rts
  224.  
  225.  
  226.  
  227. DELAYWRITE_PTR    EQU    -4
  228. DELAYREAD_PTR    EQU    -8
  229. DELAYEND_PTR    EQU    -12
  230. DELAYSTART_PTR    EQU    0
  231. DELAYBAK_PTR    EQU    -16
  232.  
  233. DELAYLEN    EQU    $6000
  234. DELAYBUFLEN    EQU    $8000
  235.  
  236.  
  237. RingBufMem_STATUS    dc.b    0    ;0= not allocated
  238.  
  239.     acode
  240. ProcDsp        ;INPUT (D0W,A1L)(SAMPLE_NUMB,SAMPLECHUNK_PTR)
  241.     movem.l    d0-a6,-(sp)
  242.     
  243.     lea.l    RingBufMem_STATUS(PC),a0
  244.     tst.b    (a0)
  245.     beq.w    .exit
  246.  
  247.  
  248.     lea.l    Delay_MEM(PC),a0
  249.     tst.l    (a0)
  250.     beq.w    .exit
  251.  
  252.  
  253.     move.l    DELAYEND_PTR(a0),d7    ;end
  254.     move.l    DELAYWRITE_PTR(a0),a2
  255.     lea.l    (a2,d0.w*4),a6
  256.     cmp.l    a6,d7
  257.     bhs.s    .rok
  258.     move.l    DELAYSTART_PTR(a0),a2
  259. .rok    move.l    DELAYREAD_PTR(a0),a3
  260.     lea.l    (a3,d0.w*4),a6
  261.     cmp.l    a6,d7
  262.     bhs.s    .lok
  263.     move.l    DELAYSTART_PTR(a0),a3
  264. .lok
  265.  
  266.     move.l    a2,DELAYBAK_PTR(a0)
  267.  
  268.  
  269.     subq.w    #1,d0
  270.     move.l    Volume(PC),d3
  271.     move.w    #256,d5
  272.  
  273.     
  274.  
  275. .loop    move.l    (a1),d1
  276.     move.l    (a2),d2
  277.     add.w    d1,d2
  278.     swap    d1
  279.     swap    d2
  280.     add.w    d1,d2
  281.     swap    d2
  282.     swap    d2
  283.     move.l    d2,(a2)+
  284.     move.l    (a3),d2
  285.     move.w    d2,d4
  286.     muls    d3,d4
  287.     divs    d5,d4
  288.     add.w    d4,d1
  289.     swap    d1
  290.     swap    d2
  291.     muls    d3,d2
  292.     divs    d5,d2
  293.     add.w    d2,d1
  294.     swap    d1
  295.     swap    d2
  296.     move.w    d4,d2
  297.     swap    d2
  298.     move.l    d2,(a3)+
  299.     move.l    d1,(a1)+
  300.     dbf    d0,.loop
  301.  
  302.  
  303.     move.l    a3,DELAYREAD_PTR(a0)
  304.     move.l    a2,DELAYWRITE_PTR(a0)
  305.  
  306.  
  307.     movem.l    (sp)+,d0-a6
  308.     tst.l    Volume+4(PC)
  309.     bne.s    ProcDspFilter
  310.     rts
  311.  
  312. .exit    movem.l    (sp)+,d0-a6
  313.     rts
  314.  
  315.  
  316.     acode
  317. ProcDspFilter        ;INPUT (D0W,A1L)(SAMPLE_NUMB,SAMPLECHUNK_PTR)
  318.     puts    d0-a3
  319.  
  320.  
  321.     lea.l    Delay_MEM(PC),a0
  322.     move.l    DELAYBAK_PTR(a0),a1
  323.  
  324.     lea.l    DspHPFilt_LASTSAMPLE(PC),a2
  325.  
  326.     ;move.l    Volume+4(PC),d3
  327.     moveq    #1,d3            ;Filter Intensity
  328.  
  329.  
  330.     move.l    (a2),d2            ;D2L    LASTSAMPLE
  331.     subq.w    #1,d0
  332.     move.w    d0,d6
  333.  
  334.  
  335.     move.l    Volume+4(PC),d7        ;Depth (Interation)
  336.     subq.w    #1,d7
  337.     bmi.s    .exit
  338.  
  339.     move.l    d2,d5
  340.     move.l    a1,a3
  341.  
  342. .loop    move.w    d6,d0
  343.     move.l    d5,d2
  344.     move.l    a3,a1
  345.  
  346. .loop2        move.l    (a1),d1
  347.  
  348.         move.l    d1,d4
  349.         sub.w    d2,d1
  350.         asr.w    d3,d1
  351.         sub.w    d1,d4
  352.         swap    d1
  353.         swap    d2
  354.         sub.w    d2,d1
  355.         asr.w    d3,d1
  356.         swap    d4
  357.         sub.w    d1,d4
  358.         swap    d4
  359.  
  360.         move.l    d4,(a1)+
  361.         move.l    d4,d2
  362.         dbf    d0,.loop2
  363.  
  364.     dbf    d7,.loop
  365.  
  366.     move.l    d4,(a2)
  367.  
  368. .exit    gets    d0-a3
  369.     rts
  370.  
  371. DspHPFilt_LASTSAMPLE    dc.l    0
  372.  
  373.  
  374.  
  375.     ;- GUI ------------------------------------------------------
  376.     ;------------------------------------------------------------
  377.  
  378. Parameter_DEF
  379.     dc.b    "Volume",0
  380.     dc.b    0,0,0,128        ;init
  381.     dc.b    0,0,0,0            ;min
  382.     dc.b    0,0,0,250        ;max
  383.  
  384.     dc.b    "LP Filt",0
  385.     dc.b    0,0,0,1            ;init
  386.     dc.b    0,0,0,0            ;min
  387.     dc.b    0,0,0,4            ;max
  388.  
  389.     dc.b    0        ;END OF GUI DEF
  390.  
  391.     ;- TITLE ----------------------------------------------------
  392.     ;------------------------------------------------------------
  393.  
  394.         dc.b    "$VER: "
  395. DSPTitle    
  396. Welcome_TXT    dc.b    "Demo Dsp Plugin: "
  397.         DspName
  398.         dc.b    0
  399.  
  400.         even
  401. test        dc.l    0
  402.     END
  403.